国际化和本地化
概述
国际化(Internationalization,简称 i18n)和本地化(Localization,简称 L10n)是构建多语言和多地区支持的 Web 应用的关键步骤。Django 提供了强大的工具来帮助开发者轻松实现这一目标。
国际化
国际化是指设计和开发应用程序,使其能够适应不同的语言和地区,而不需要进行工程上的更改。Django 通过以下方式支持国际化:
1. 语言设置
Django 允许你在项目中设置默认语言,并根据用户的需求动态更改语言。
# settings.py
LANGUAGE_CODE = 'en-us' # 默认语言为英语
LANGUAGES = [
('en', 'English'),
('es', 'Spanish'),
('zh-hans', 'Simplified Chinese'),
]
2. 翻译字符串
Django 使用 gettext 来标记需要翻译的字符串。你可以在模板和 Python 代码中使用 {% trans %} 和 {% blocktrans %} 标签。
<!-- templates/base.html -->
<h1>{% trans "Welcome to our site" %}</h1>
在 Python 代码中:
from django.utils.translation import gettext as _
def welcome_view(request):
message = _("Welcome to our site")
return HttpResponse(message)
3. 生成翻译文件
使用 makemessages 命令生成翻译文件:
django-admin makemessages -l es
这将生成一个 .po 文件,你可以在其中添加翻译。
4. 编译翻译
使用 compilemessages 命令编译翻译文件:
django-admin compilemessages
这将生成 .mo 文件,Django 会使用这些文件来提供翻译。
本地化
本地化是指根据特定地区的语言、文化和习惯调整应用程序的内容和功能。Django 通过以下方式支持本地化:
1. 时区设置
Django 允许你设置默认时区,并根据用户的需求动态更改时区。
# settings.py
TIME_ZONE = 'UTC' # 默认时区为 UTC
USE_I18N = True
USE_L10N = True
USE_TZ = True
2. 日期和时间格式
Django 会根据用户的语言和地区自动格式化日期和时间。
<!-- templates/base.html -->
<p>{% now "SHORT_DATETIME_FORMAT" %}</p>
3. 数字格式
Django 会根据用户的语言和地区自动格式化数字。
<!-- templates/base.html -->
<p>{{ 1234.56|floatformat:2 }}</p>
实践练习
练习 1:添加多语言支持
- 在
settings.py中设置LANGUAGES和LANGUAGE_CODE。 - 在模板中使用
{% trans %}标签标记需要翻译的字符串。 - 运行
makemessages和compilemessages命令生成和编译翻译文件。
练习 2:动态更改语言
- 创建一个视图,允许用户选择语言。
- 使用
django.utils.translation.activate动态更改语言。
from django.utils.translation import activate
def set_language(request):
lang = request.GET.get('lang')
activate(lang)
return redirect('home')
练习 3:本地化日期和时间
- 在模板中使用
{% now %}标签显示当前日期和时间。 - 观察不同语言下的日期和时间格式变化。
总结
通过本教程,你学习了如何在 Django 中实现国际化和本地化。你了解了如何设置语言和时区,标记和翻译字符串,以及如何动态更改语言和格式化日期和时间。这些技能将帮助你构建适应不同语言和地区的 Web 应用程序。